//
// @Auther: by wujehy 
// @Email:wujehy@qq.com
// @Data:20-4-13
// @Time:上午10:43
//

#include "BaseServer.h"
#include <iostream>
#include <handy/handy.h>

using namespace handy;

BaseServer::~BaseServer()
{
    std::cout << " end " << std::endl;
}

BaseServer::BaseServer(int beginPort, int endPort, int processes, int manPort) : begin_port( beginPort ),
                                                                                 end_port( endPort ),
                                                                                 processes( processes ),
                                                                                 man_port( manPort )
{
    std::cout << " start " << std::endl;
}

void BaseServer::setBeginPort(int beginPort)
{
    begin_port = beginPort;
}

void BaseServer::setEndPort(int endPort)
{
    end_port = endPort;
}

void BaseServer::setProcesses(int processes)
{
    BaseServer::processes = processes;
}

void BaseServer::setManPort(int manPort)
{
    man_port = manPort;
}
//
//int BaseServer::startServer()
//{
//
//    int pid = 1 ;
//    for (int i = 0; i < processes; i++) {
//        pid = fork();
//        if (pid == 0) {  // a child process, break
//            break;
//        }
//    }
//
//    EventBase base;
//
//
//    if (pid == 0 )
//    {
//        // 这是  子进程的处理 情况
//        usleep(100 * 1000);  // 等待 管理器 启动
//        //
//
//    } else
//    {
//        // 这是 父进程
//        std::vector<TcpServerPtr> svrs; // 服务池
//        // 事件状态器
//        long connected = 0, closed = 0, recved = 0;
//
//        // 服务初始化
//        for (int i = 0; i < end_port - begin_port; i++) {
//            TcpServerPtr p = TcpServer::startServer(&base, "", begin_port + i, true);
//            p->onConnCreate([&] {
//                TcpConnPtr con(new TcpConn);
//                con->onState([&](const TcpConnPtr &con) {
//                    auto st = con->getState();
//                    if (st == TcpConn::Connected) {
//                        // 连接 接入的事件
//                        connected++;
//                    } else if (st == TcpConn::Closed || st == TcpConn::Failed) {
//                        // 连接关闭的事件
//                        closed++;
//                        connected--;
//                    }
//                });
//                con->onMsg(new LengthCodec, [&](const TcpConnPtr &con, Slice msg) {
//                    // 消息 数据 到达的事件
//                    recved++;
//                    // 回包处理
//                    con->sendMsg(msg);
//                });
//                return con;
//            });
//            svrs.push_back(p);
//        }
//
//        // 接入管理器
//        TcpConnPtr report = TcpConn::createConnection(&base, "127.0.0.1", man_port, 3000);
//        report->onMsg(new LineCodec, [&](const TcpConnPtr &con, Slice msg) {
//            //
//            if (msg == "exit") {
//                info("recv exit msg from master, so exit");
//                base.exit();
//            }
//        });
//        report->onState([&](const TcpConnPtr &con) {
//            if (con->getState() == TcpConn::Closed) {
//                base.exit();
//            }
//        });
//        base.runAfter(100, [&]() { report->sendMsg(util::format("%d connected: %ld closed: %ld recved: %ld", getpid(), connected, closed, recved)); }, 100);
//        base.loop();
//
//
//    }
//}
